μC/OS

您所在的位置:网站首页 lua ostime() μC/OS

μC/OS

#μC/OS| 来源: 网络整理| 查看: 265

μC/OS-II是什么?

可移植、可固化、可裁剪、占先式多任务实时内核适用多种微处理器、数字处理芯片系统源代码开放、整洁(适合系统开发)通过各种宏的来打开或者 关闭那些不需要用到系统服务专门为嵌入式应用设计(主C语言、CPU硬件部分为汇编)执行效率高、占用空间小(MIN 2KB)、实时性能优良、可扩展性强包含:任务调度、任务管理、时间管理、内存管理、任务间的通信与同步等提供最基本的系统服务:信号量、邮箱、消息队列、内存管理、中断管理等在μC/OS-II内核之上,还有如下独立模块可供用户选择:μC/FS文件系统模块、μC/GUI图形软件模块、μC/TCP-IP协议栈模块、μC/USB协议栈模块

需Micrium获得商用许可

组成

核心部分(OSCore.c) 操作系统的处理核心!包括操作系统初始化、运行、中断进出的前导、时钟节拍、任务的调度、事件处理等多部分

任务处理部分(OSTask.c) 与任务的操作密切相关!包括任务的建立、删除、挂起、恢复等,原因是μC/OS-II是以任务为基本单位调度的,因此此部分非常重要。

时钟部分(OSTime.c) μC/OS-II中的最小时钟单位是timetick(时钟节拍) 任务延时等操作在这儿完成。

任务同步和通信部分 为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部分;主要用于任务间的互相联系和对临界资源的访问。

与CPU的接口部分 μC/OS-II针对所使用的CPU移植部分,由于μC/OS-II是一个通用性操作系统,所以对于关键问题上的实现,还需要根据具体的CPU具体内容和要求作相应的移植。牵涉SP等系统指针,所以用汇编编写,主要为中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处理部分等内容。

任务管理

μC/OS-II 中最多可以支持256个任务(0最高优先级)μC/OS仅支持64个任务

μC/OS-II 提供了 任务管理 和各种 函数调用 ,包括空闲任务(优先级最低),该任务仅给一个整型变量做累加运算;另一个是系统任务(优先级次低),负责统计当前CPU的利用率。

时间管理

μC/OS-II 的时间管理通过定时中断来实现的,该定时中断一般为10ms或者100ms发生一次,时间频率取决于用户对硬件系统的定时器编程来实现。中断发生的时间间隔固定不变的,该中断也成为一个时钟节拍。

μC/OS-II 要求用户在定时中断的服务程序中,调用系统提供的与时钟节拍相关的系统函数,例如:中断级的任务切换函数,系统时间函数。

内存管理

在ANSI C中是使用malloc和free两个函数来动态分配和释放内存。但在嵌入式实时系统中,多次这样的操作会导致内存碎片,且由于内存管理算法的原因,malloc和free的执行时间也是不确定。

μC/OS-II中把连续的大块内存按分区管理。每个分区中包含整数个大小相同的内存块,但不同分区之间的内存块大小可以不同。用户需要动态分配内存时,系统选择一个适当的分区,按块来分配内存。释放内存时将该块放回它以前所属的分区,这样能有效解决碎片问题,同时执行时间也是固定的。

通信同步

对一个多任务的操作系统来说,任务间的通信和同步是必不可少的。μC/OS-II中提供了4种同步对象,分别是信号量,邮箱,消息队列和事件。所有这些同步对象都有创建,等待,发送,查询的接口用于实现进程间的通信和同步。

任务调度

μC/OS-II 采用的是可剥夺型实时多任务内核。可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。μC/OS-II的任务调度是完全基于任务优先级的抢占式调度,也就是最高优先级的任务一旦处于就绪状态,则立即抢占正在运行的低优先级任务的处理器资源。为了简化系统设计,μC/OS-II规定所有任务的优先级不同,因为任务的优先级也同时唯一标志了该任务本身。高优先级的任务因为需要某种临界资源,主动请求挂起,让出处理器,此时将调度就绪状态的低优先级任务获得执行,这种调度也称为任务级的上下文切换。高优先级的任务因为时钟节拍到来,在时钟中断的处理程序中,内核发现高优先级任务获得了执行条件(如休眠的时钟到时),则在中断态直接切换到高优先级任务执行。这种调度也称为中断级的上下文切换。这两种调度方式在 μC/OS-II 的执行过程中非常普遍,一般来说前者发生在系统服务中,后者发生在时钟中断的服务程序中。调度工作的内容可以分为两部分:最高优先级任务的寻找和任务切换。其最高优先级任务的寻找是通过建立就绪任务表来实现的。中的每一个任务都有独立的堆栈空间,并有一个称为任务控制块 TCB(Task Control Block) 的数据结构,其中第一个成员变量就是保存的任务堆栈指针。任务调度模块首先用变量 OSTCBHighRdy 记录当前最高级就绪任务的 TCB 地址,然后调用 OS_TASK_SW( ) 函数来进行任务切换。 与处理器无关的代码 os_core.c os_flag.c os_mbox.c os_mem.c os_mutex.c os_q.c os_sem.c os_task.c os_time.c os_tmr.c ucos_ii.h 与处理相关的代码(移植时需要修改) os_cpu_c.c os_cpu_a.asm os_cpu.h 与应用程序相关的代码 os_cfg.h includes.h

UCOS-II的移植步骤 1、向工程中添加相应的文件 2、修改bsp.c和bsp.h 3、修改os_cpu_a.asm 4、修改os_cpu_c.c。 5、修改os_cfg_app.h(主要针对系统内部的一些系统任务配置,如优先级,任务堆栈,系统时钟节拍等) 6、修改SYSTEM文件夹 (1)、修改sys.h (2)、修改delaly.c 7、测试程序测试移植是否正确。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3